import { fileURLToPath, URL } from 'node:url'
import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueDevTools from 'vite-plugin-vue-devtools'
import vueJsx from '@vitejs/plugin-vue-jsx'
import { resolve } from 'path'

// https://vite.dev/config/
export default defineConfig(({ command, mode }) => {
  // 加载环境变量
  const env = loadEnv(mode, process.cwd(), '')
  
  return {
    // 配置插件
    plugins: [
      vue(), // Vue 3 支持
      vueDevTools(), // Vue 开发工具
      vueJsx(), // JSX 支持
    ],
    // 解析配置
    resolve: {
      alias: {
        '@': fileURLToPath(new URL('./src', import.meta.url)) // 设置 @ 指向 src 目录
      },
      extensions: ['.js', '.vue', '.json', '.ts', '.tsx'] // 导入时想要省略的扩展名列表
    },
    // 开发服务器配置
    server: {
      host: '0.0.0.0', // 指定服务器主机名
      port: 9080, // 指定服务器端口
      open: true // 自动打开浏览器
    },
    // 构建配置
    build: {
      target: 'es2015', // 浏览器兼容目标
      outDir: 'dist', // 输出目录
      assetsDir: 'assets', // 静态资源目录
      minify: 'terser', // 压缩方式
      terserOptions: {
        compress: {
          drop_console: true, // 生产环境移除 console
          drop_debugger: true // 生产环境移除 debugger
        }
      },
      rollupOptions: {
        output: {
          manualChunks: (id) => {
            // 将 node_modules 中的代码单独打包
            if (id.includes('node_modules')) {
              if (id.includes('element-plus')) {
                return 'element-plus'
              }
              if (id.includes('vue') || id.includes('pinia') || id.includes('vue-router')) {
                return 'vue-vendor'
              }
              return 'vendor'
            }
          }
        }
      }
    },
    // CSS 相关配置
    css: {
      preprocessorOptions: {
        
      }
    },
    // 定义全局常量
    define: {
      'process.env': env // 将环境变量注入到客户端代码中
    },
    // 依赖优化配置
    optimizeDeps: {
      include: ['vue', 'vue-router', 'pinia', 'element-plus'], // 预构建的依赖
      exclude: ['vue-demi'] // 排除预构建的依赖
    }
  }
}) 